package com.ruoyi.system.service;

import com.ruoyi.system.api.domain.SysDept;
import com.ruoyi.system.domain.SysAssetCategory;
import com.ruoyi.system.domain.vo.CategoryTreeSelect;

import java.util.Collection;
import java.util.List;

/**
 * Description:
 * Author: ZLZ
 * Date: 2025/2/26
 */
public interface ISysAssetCategoryService {

    /**
     * 查询资产分类
     *
     * @param categoryId 资产分类主键
     * @return 资产分类
     */
    public SysAssetCategory selectSysAssetCategoryByCategoryId(Long categoryId);

    /**
     * 查询分类列表
     * @param sysAssetCategory
     * @return
     */
    public List<SysAssetCategory> selectSysAssetCategoryList(SysAssetCategory sysAssetCategory);

    /**
     * 查询分类树结构信息
     *
     * @param sysAssetCategory 分类信息
     * @return 分类树信息集合
     */
    public List<CategoryTreeSelect> selectCategoryTreeList(SysAssetCategory sysAssetCategory);

    /**
     * 构建前端所需要树结构
     *
     * @param categories 分类列表
     * @return 树结构列表
     */
    public List<SysAssetCategory> buildCategoryTree(List<SysAssetCategory> categories);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param categories 分类列表
     * @return 下拉树结构列表
     */
    public List<CategoryTreeSelect> buildCategoryCategoryTreeSelect(List<SysAssetCategory> categories);

    /**
     * 新增资产分类
     *
     * @param sysAssetCategory 资产分类
     * @return 结果
     */
    public int insertSysAssetCategory(SysAssetCategory sysAssetCategory);

    /**
     * 修改资产分类
     *
     * @param sysAssetCategory 资产分类
     * @return 结果
     */
    public int updateSysAssetCategory(SysAssetCategory sysAssetCategory);

    /**
     * 批量删除资产分类
     *
     * @param categoryIds 需要删除的资产分类主键集合
     * @return 结果
     */
    public int deleteSysAssetCategoryByCategoryIds(Long[] categoryIds);

    /**
     * 删除资产分类信息
     *
     * @param categoryId 资产分类主键
     * @return 结果
     */
    public int deleteSysAssetCategoryByCategoryId(Long categoryId);

    /**
     * 查询当前节点是否有子分类
     * @param categoryId
     * @return
     */
    public int selectListByParentId(Long categoryId);

    /**
     * 检查分类名称是否唯一
     * @param categoryName
     * @return
     */
    int checkCategoryNameUnique(String categoryName);
}
